package com.linkai.mt_2021_11;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/**
 * @Description: 小美的礼物
 *              注意：需要先对商店价格和最低价格进行排序，然后再遍历
 * @Author: 林凯
 * @Date: 2021/10/10 11:22
 */
public class Main04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();       // 朋友数
        int m = sc.nextInt();       // 商店礼物数
        int friend[] = new int[n + 1];
        int price[] = new int[m + 1];
        int c[] = new int[n + 1];
        // 这里设置存储元素的数组下标从1开始
        for (int i = 1; i <= n; i++) {
            friend[i] = sc.nextInt();
        }
        for (int i = 1; i <= m; i++) {
            price[i] = sc.nextInt();
        }
        for (int i = 1; i <= n; i++) {
            c[i] = sc.nextInt();
        }
        // 需要对商店礼物价格和最低价格进行排序
        Arrays.sort(price);
        Arrays.sort(c);
        ArrayList<Integer> priceList = new ArrayList<>();
        priceList.add(-1);
        for (int i = 1; i <= m; i++) {
            priceList.add(price[i]);
        }


        int num[] = new int[n +1];      // 最低价格总和
        // 遍历所有的朋友; i 表示当前遍历到第几个朋友
        for (int i = 1; i <=n; i++) {
            int sum = 0;        // 当前已经挑选的礼物数量
            // 遍历价格; j 表示当前遍历到商店礼物的第几个价格
            int index = priceList.indexOf(c[i]);
            for (int j = index; j <= m; j++) {
                // 如果挑选的礼物数量已经足够了，则跳出 for 循环
                if (sum == friend[i]) {
                    break;
                }
                if (priceList.get(j) >= c[i]) {
                    num[i] += priceList.get(j);     // 价格增加
                    sum++;  // 挑选的礼物数量加一
                }
            }
            // 循环结束之后，还需要判断礼物是否已经挑选足够
            if (sum != friend[i]) {
                num[i] = -1;     // 礼物不足，说明没有符号条件，置-1
            }

        }

        for (int i = 1; i <= n; i++) {
            System.out.print(num[i] + " ");
        }
    }
}
